<?php
/**
 * 核心 - [钩子]类
 *
 * @version $Id: Hook.php 142 2013-10-08 12:17:19Z linsir123 $
 * @package Core
 */
class Hook
{
	/**
	 * 勾子列表
	 *
	 * @var array
	 */
	private $_list = array(
		// 应用周期结束
		'end' => array(),

		// 记录日志
		'log' => array(),

		// 消息派发之前
		'dispatcher_start' => array(),
	);

	/**
	 * 注册勾子
	 *
	 * @param string $hook 勾子名称
	 * @param callback $callback 回调
	 */
	public function addHook($hook, $callback)
	{
		///
		if (array_key_exists($hook, $this->_list) && is_callable($callback))
			$this->_list[$hook][] = $callback;
	}

	/**
	 * 执行某个勾子
	 *
	 * @param string $hook 勾子名称
	 * @param mixed $params 参数
	 * @param mixed $return 是否返回
	 *
	 * @return mixed
	 */
	public function activeHook($hook, $params = null, $return = false)
	{
		///
		$needArgs = ! empty($params);
		$list = isset($this->_list[$hook]) ? $this->_list[$hook] : array();

		///
		foreach ($list as $callback) {
			$args = $needArgs ? array($params) : array();
			$params = call_user_func_array($callback, $args);
		}

		///
		return $return ? $params : null;
	}
}
